成品:
成品網址
成品功能: 1.可以更改各國的貨幣內容並調整金額 2.可以更換順序 例如 1 美金換 0.81 歐元改成 1 歐元換 1.23 美金 點選 Swap 直接更換 3.有個區域顯示匯率(下圖紅框框處) 4.使用 fetch 更新 API 的內容並使用回傳回來的資料修改匯率
HTML 上方大圖 一些簡單的文字描述 下拉式選單表格 更換匯率的按鈕 顯示匯率的 div 沒有甚麼太特別的地方
上 CSS 之前的 HTML:
程式碼: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 <body > <img src ="img/money.png" alt ="" class ="money-img" /> <h1 > Exchange Rate Calculator</h1 > <p > Choose the currency and the amounts to get the exchange rate</p > <div class ="container" > <div class ="currency" > <select id ="currency-one" > <option value ="AED" > AED</option > <option value ="ARS" > ARS</option > <option value ="AUD" > AUD</option > <option value ="BGN" > BGN</option > <option value ="BRL" > BRL</option > <option value ="BSD" > BSD</option > <option value ="CAD" > CAD</option > <option value ="CHF" > CHF</option > <option value ="CLP" > CLP</option > <option value ="CNY" > CNY</option > <option value ="COP" > COP</option > <option value ="CZK" > CZK</option > <option value ="DKK" > DKK</option > <option value ="DOP" > DOP</option > <option value ="EGP" > EGP</option > <option value ="EUR" > EUR</option > <option value ="FJD" > FJD</option > <option value ="GBP" > GBP</option > <option value ="GTQ" > GTQ</option > <option value ="HKD" > HKD</option > <option value ="HRK" > HRK</option > <option value ="HUF" > HUF</option > <option value ="IDR" > IDR</option > <option value ="ILS" > ILS</option > <option value ="INR" > INR</option > <option value ="ISK" > ISK</option > <option value ="JPY" > JPY</option > <option value ="KRW" > KRW</option > <option value ="KZT" > KZT</option > <option value ="MXN" > MXN</option > <option value ="MYR" > MYR</option > <option value ="NOK" > NOK</option > <option value ="NZD" > NZD</option > <option value ="PAB" > PAB</option > <option value ="PEN" > PEN</option > <option value ="PHP" > PHP</option > <option value ="PKR" > PKR</option > <option value ="PLN" > PLN</option > <option value ="PYG" > PYG</option > <option value ="RON" > RON</option > <option value ="RUB" > RUB</option > <option value ="SAR" > SAR</option > <option value ="SEK" > SEK</option > <option value ="SGD" > SGD</option > <option value ="THB" > THB</option > <option value ="TRY" > TRY</option > <option value ="TWD" > TWD</option > <option value ="UAH" > UAH</option > <option value ="USD" selected > USD</option > <option value ="UYU" > UYU</option > <option value ="VND" > VND</option > <option value ="ZAR" > ZAR</option > </select > <input type ="number" id ="amount-one" placeholder ="0" value ="1" /> </div > <div class ="swap-rate-container" > <button class ="btn" id ="swap" > Swap </button > <div class ="rate" id ="rate" > </div > </div > <div class ="currency" > <select id ="currency-two" > <option value ="AED" > AED</option > <option value ="ARS" > ARS</option > <option value ="AUD" > AUD</option > <option value ="BGN" > BGN</option > <option value ="BRL" > BRL</option > <option value ="BSD" > BSD</option > <option value ="CAD" > CAD</option > <option value ="CHF" > CHF</option > <option value ="CLP" > CLP</option > <option value ="CNY" > CNY</option > <option value ="COP" > COP</option > <option value ="CZK" > CZK</option > <option value ="DKK" > DKK</option > <option value ="DOP" > DOP</option > <option value ="EGP" > EGP</option > <option value ="EUR" selected > EUR</option > <option value ="FJD" > FJD</option > <option value ="GBP" > GBP</option > <option value ="GTQ" > GTQ</option > <option value ="HKD" > HKD</option > <option value ="HRK" > HRK</option > <option value ="HUF" > HUF</option > <option value ="IDR" > IDR</option > <option value ="ILS" > ILS</option > <option value ="INR" > INR</option > <option value ="ISK" > ISK</option > <option value ="JPY" > JPY</option > <option value ="KRW" > KRW</option > <option value ="KZT" > KZT</option > <option value ="MXN" > MXN</option > <option value ="MYR" > MYR</option > <option value ="NOK" > NOK</option > <option value ="NZD" > NZD</option > <option value ="PAB" > PAB</option > <option value ="PEN" > PEN</option > <option value ="PHP" > PHP</option > <option value ="PKR" > PKR</option > <option value ="PLN" > PLN</option > <option value ="PYG" > PYG</option > <option value ="RON" > RON</option > <option value ="RUB" > RUB</option > <option value ="SAR" > SAR</option > <option value ="SEK" > SEK</option > <option value ="SGD" > SGD</option > <option value ="THB" > THB</option > <option value ="TRY" > TRY</option > <option value ="TWD" > TWD</option > <option value ="UAH" > UAH</option > <option value ="USD" > USD</option > <option value ="UYU" > UYU</option > <option value ="VND" > VND</option > <option value ="ZAR" > ZAR</option > </select > <input type ="number" id ="amount-two" placeholder ="0" /> </div > </div > <script src ="script.js" > </script > </body >
CSS: CSS 設置好的樣式
程式碼 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 :root { --primary-color : #5fbaa7 ; } * { box-sizing : border-box; } body { background-color : #f4f4f4 ; font-family : Arial, Helvetica, sans-serif; display : flex; flex-direction : column; align-items : center; justify-content : center; height : 100vh ; margin : 0 ; padding : 20px ; } h1 { color : var (--primary-color); } p { text-align : center; } .btn { color : #fff ; background : var (--primary-color); cursor : pointer; border-radius : 5px ; font-size : 12px ; padding : 5px 12px ; } .money-img { width : 150px ; } .currency { padding : 40px 0 ; display : flex; align-items : center; justify-content : space-between; } .currency select { padding : 10px 20px 10px 10px ; -moz-appearance: none; -webkit-appearance: none; appearance: none; border : 1px solid #dedede ; font-size : 16px ; background : transparent; background-image : url ('data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22292.4%22%20height%3D%22292.4%22%3E%3Cpath%20fill%3D%22%20000002%22%20d%3D%22M287%2069.4a17.6%2017.6%200%200%200-13-5.4H18.4c-5%200-9.3%201.8-12.9%205.4A17.6%2017.6%200%200%200%200%2082.2c0%205%201.8%209.3%205.4%2012.9l128%20127.9c3.6%203.6%207.8%205.4%2012.8%205.4s9.2-1.8%2012.8-5.4L287%2095c3.5-3.5%205.4-7.8%205.4-12.8%200-5-1.9-9.2-5.5-12.8z%22%2F%3E%3C%2Fsvg%3E' ); background-position : right 10px top 50% , 0 , 0 ; background-size : 12px auto, 100% ; background-repeat : no-repeat; } .currency input { border : 0 ; background : transparent; font-size : 30px ; text-align : right; } .swap-rate-container { display : flex; align-items : center; justify-content : space-between; } .rate { color : var (--primary-color); font-size : 14px ; padding : 0 10px ; } select:focus , input :focus , button :focus { outline : 0 ; } @media (max-width : 600px ) { .currency input { width : 200px ; } }
小補充:
無
JS: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 const currencyEl_one = document .getElementById('currency-one' );const amount_one = document .getElementById('amount-one' );const currencyEl_two = document .getElementById('currency-two' );const amount_two = document .getElementById('amount-two' );const rateEl = document .getElementById('rate' );const swap = document .getElementById('swap' );function calculate ( ) { const currency_one = currencyEl_one.value; const currency_two = currencyEl_two.value; fetch(`https://api.exchangerate-api.com/v4/latest/${currency_one} ` ) .then(res => res.json()) .then(data => { const rate = data.rates[currency_two]; rateEl.innerText = `1 ${currency_one} = ${rate} ${currency_two} ` ; amount_two.value = (amount_one.value * rate).toFixed(2 ); }) } currencyEl_one.addEventListener('change' , calculate); amount_one.addEventListener('input' , calculate); currencyEl_two.addEventListener('change' , calculate); amount_two.addEventListener('input' , calculate); swap.addEventListener('click' , () => { const temp = currencyEl_one.value; currencyEl_one.value = currencyEl_two.value; currencyEl_two.value = temp; calculate(); })
小補充:
無
jQuery: 以 currencyOne 為主軸去計算所有的空位
主要使用 jQuery 的部分主要是處理
抓取 id 抓取下拉式選單的 value 呈現 value 到 DOM 更改內文使用 text() 監聽事件的部分主要是處理使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 let currencyOne = $("#currency-one" );let amountOne = $("#amount-one" );let currencyTwo = $("#currency-two" );let amountTwo = $("#amount-two" );const swapBtn = $("#swap" );const showRate = $("#rate" );function calculate ( ) { fetch(`https://api.exchangerate-api.com/v4/latest/${currencyOne.val()} ` ) .then((res ) => res.json()) .then((data ) => { const rate = data.rates[currencyTwo.val()]; amountTwo.val((rate * amountOne.val()).toFixed(2 )); showRate.text(`1${currencyOne.val()} = ${rate} ${currencyTwo.val()} ` ); }); } currencyOne.change(() => calculate()); amountOne.change(() => calculate()); currencyTwo.change(() => calculate()); amountTwo.change(() => calculate()); swapBtn.click(() => { let temp = currencyOne.val(); currencyOne.val(currencyTwo.val()); currencyTwo.val(temp); calculate(); }); calculate();